Android OpenGL lesson #12 :: OPEN GL ES[SSISO Community]
 
SSISO 카페 SSISO Source SSISO 구직 SSISO 쇼핑몰 SSISO 맛집
추천검색어 : JUnit   Log4j   ajax   spring   struts   struts-config.xml   Synchronized   책정보   Ajax 마스터하기   우측부분

OPEN GL ES
[1]
등록일:2018-06-18 11:56:35 (0%)
작성자:
제목:Android OpenGL lesson #12

Android OpenGL lesson #12

 

이번 강의는 아래 위쪽이 텍스쳐로 막혀 있고 옆 면의 특정한 부분은 뚫려 있는 방(room)과 같은 공간을 그려 보는 방법에 대해 알아보겠다. 그리고 정점(,vertex) texture 값들을 소스에 하드 코딩하는 것이 아니라 외부 파일에 저장한 다음 불러 오는 방식을 보여준다. 이렇게 하면 좋은 점이 다시 컴파일 하는 과정 없이 외부 리소스 데이터만 바꿔서 새로운 화면을 그릴 수 있다는 것이다.

 

소스는 역시나 아래 사이트에서 참고했다.

http://insanitydesign.com/wp/projects/nehe-android-ports/

 

이번 장에서도 OpenGL 이해에 꼭 필요한 코드가 아닌 경우에는 삭제를 했고 앞 장에서도 언급했듯이 본인의 테스트 시료가 넥서스원이라 실제 폰에서 실행되지 않는 코드는 삭제 했다.

 

먼저 실행 화면부터 보겠다. (먼저 소스 실행부터 해 볼 것을 권한다)

 

 

프로그램 실행 순서는 다음과 같다.

1. 외부 파일 /sdcard/world.txt 를 읽어서 파싱한다음 필요한 데이터 얻음.

2. 데이터를 배열로 저장한 다음 FloatBuffer 타입의 Vertext Buffer Texture Buffer 를 만든다.

3. 만들어진 Buffer 를 이용해서 화면에 그림을 그린다.

 

이번 장에서 가장 특이한 점은 index 배열이 없다는 것이다. 그래서 gl.glDrawElement() 메소드 대신에 gl.glDrawArrays() 메소드를 사용하는 것이다. 그렇기 때문에 vertex 배열의 크기가 다른 예제에 비해서 많이 크다는 것을 알 수 있을 것이다. Index 배열 없이 사각형의 texture를 그리기 위해서는 index 개수만큼(6) vertex 를 지정해 줘야 하기 때문이다.

 

코드 설명 :

CustomGLSurfaceView.java

이전 예제에서는 touch listener CustomGLSurfaceView 담당했는데 이번 장에서는 World.java 객체가 touch 받아야 하기 때문에 world.loadGLTexture(gl, this.context) 추가했다(코드의 효유성 면에서는 방법이 나은 같기도 하다). 그리고 Touch 이벤트가 World 객체에 전달돼야 하기 때문에 아래 메소드 처리가 필요하다.

 

public boolean onTouchEvent(MotionEvent event) {

       return true;

}

 

부분이 없으면 화면 터치 움직여도 아무 반응을 보이지 않을 것이다.

 

World.java

/sdcard/world.txt 에서 데이터 추출하는 과정 외에는 이전 소스들과 차이가 없다. 다만 index 쓰지 않고 vertex 만으로 처리하기 때문에 편리를 위해 가지 inner class 정의해서 쓰고 있다는 차이다.

 

World.txt

종이에다 각각의 vertex 찍어서 직접 그려 것을 권한다. 일단 어떤 형태인지 머리 속에 그려 놓으면 다음의 내용들이 이해가 쉬울 것이다.

 

본인은 이번 장의 내용 이해를 위해 다음과 같은 변경을 보았다.

1. world.txt NUMPOLLIES  4 수정해서 테스트

그러면 다음과 같은 이미지가 보인다.

 

 

예상했겠지만 바닥과 천장만 있는 이미지가 보인다.

 

 

2. public void onDrawFrame(GL10 gl) 에서 gl.glTranslatef(0.0f, 0.0f, -7.0f) 추가.

 

 

 

Blending 효과를 on 시키고 회전시키면 다음과 같은 이미지가 보인다.

 

 

이제 다시 원래 값이 NUMPOLLIES 36 으로 수정하고 실행하면 보이는 화면

 

이리 저리 돌리다 보면 뚫린 구멍 개가 일치하는 순간도 보인다. Blending on 시키면 신기한 화면을 있을 것이다.

 

정도 테스트 봤다면 이번 장에서 얘기하고자 하는 바를 대충 이해했을 것이라 본다.

 

그럼 이만

[본문링크] Android OpenGL lesson #12
[1]
코멘트(이글의 트랙백 주소:/cafe/tb_receive.php?no=34655
작성자
비밀번호

 

SSISOCommunity

[이전]

Copyright byCopyright ⓒ2005, SSISO Community All Rights Reserved.